package com.iursp.utils;


import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.iursp.domain.result.ExceptionMsg;
import com.iursp.domain.result.Response;
import com.iursp.validate.code.model.CommonMessage;

public class MessageUtils {
	/*private static String extend = "123456";
	private static String smsType = "normal";
	private static String smsFreeSignName = "影联科技";*/
	
    //产品名称:云通信短信API产品,开发者无需替换
    static final String product = "Dysmsapi";
    //产品域名,开发者无需替换
    static final String domain = "dysmsapi.aliyuncs.com";

    // TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
    static final String accessKeyId = "VnCmICGvDVTfsMLk";
    static final String accessKeySecret = "clqoaK9WNdL3Wol68cQ1wrABFkNdfi";
	
	/**
	 * 
	* @Description:新版阿里云短信平台发送
	* @param @param smsParam
	* @param @return    
	* @author ruiwu
	* @date 2018年4月11日 下午1:43:51 
	* @version V1.0
	 */
	public static Response SendMessage(CommonMessage commonMessage) {
		Response result = null;
		//发短信
		 try {
			SendSmsResponse response = sendSms(commonMessage);
			if(response.getCode().equals("OK")){
				//发送成功
				result = new Response("000000","短信发送成功");
			}else{
				result = AlibabaSubCode(response.getCode());
			}
			
		} catch (ClientException e) {
			e.printStackTrace();  //异常处理，后期添加
		}
		return result;
	}	
	
	private static Response AlibabaSubCode(String SubCode){
		Response result = null;
		if(SubCode == "isv.TEMPLATE_MISSING_PARAMETERS" || SubCode.equals("isv.TEMPLATE_MISSING_PARAMETERS")){
			//短信模板变量缺少参数
			result = ResultUtils.result(ExceptionMsg.CODE_ERROT);
		}
		else if(SubCode == "isv.BUSINESS_LIMIT_CONTROL" || SubCode.equals("isv.BUSINESS_LIMIT_CONTROL")){
			//单日获取次数过多
			result = ResultUtils.result(ExceptionMsg.SmsBusinessLimit);
		}
		else if(SubCode == "isv.MOBILE_NUMBER_ILLEGAL" || SubCode.equals("isv.MOBILE_NUMBER_ILLEGAL")){
			//手机号码不正确
			result = ResultUtils.result(ExceptionMsg.SmsMobileNumber);
		}
		else if(SubCode == "isv.SMS_SIGNATURE_ILLEGAL" || SubCode.equals("isv.SMS_SIGNATURE_ILLEGAL")){
			//短信模板不合法
			result = ResultUtils.result(ExceptionMsg.SmsSignatureIllegal);
		}
		else {
			result = ResultUtils.result(ExceptionMsg.SmsOtherException);
		}
		return result;
	}
	
	private static SendSmsResponse sendSms(CommonMessage commonMessage) throws ClientException {
		  //可自助调整超时时间
        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
        System.setProperty("sun.net.client.defaultReadTimeout", "10000");

        //初始化acsClient,暂不支持region化
        IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
        DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
        IAcsClient acsClient = new DefaultAcsClient(profile);

        //组装请求对象-具体描述见控制台-文档部分内容
        SendSmsRequest request = new SendSmsRequest();
        //必填:待发送手机号
        request.setPhoneNumbers(commonMessage.getTelNumber());
        //必填:短信签名-可在短信控制台中找到
        request.setSignName("影联科技");
        //必填:短信模板-可在短信控制台中找到
        request.setTemplateCode(commonMessage.getSmsTemplateCode());
        //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
        request.setTemplateParam(commonMessage.getContent());
        //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
        request.setOutId("yourOutId");
        //hint 此处可能会抛出异常，注意catch
        SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
        return sendSmsResponse;
	}
	
	public static void main(String[] args) throws ClientException {
		String content = "{\"name\":\"吴瑞\",\"teamName\":\"测试团队\"}";
		CommonMessage commonMessage = new CommonMessage("SMS_130916330", content, "18119614227");
		SendSmsResponse sendSms = sendSms(commonMessage);
		System.out.println(sendSms.toString());
		System.out.println(sendSms.getCode());
		System.out.println(sendSms.getMessage());
	}
	
}
